import axios from 'axios';
import {useAuthStore} from "@/stores/modules/authStore.js";

const getNormalizedBaseURL = () => {
    let baseURL = import.meta.env.VITE_API_BASE_URL|| 'http://localhost:9998';

    if (baseURL && /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.test(baseURL)) {
        baseURL = `http://${baseURL}`;
    }

    if (baseURL && !baseURL.endsWith('/')) {
        baseURL += '/';
    }
    return baseURL;
};


const http = axios.create({
    baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:9998',
    timeout: 5000,
    withCredentials: true, // 必须设置
    headers: {
        'Content-Type': 'application/json'
    }
});

// 请求拦截器
http.interceptors.request.use(
    (config) => {
        const authStore = useAuthStore();
        config.headers['satoken'] = `${authStore.token}`;
        return config
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
http.interceptors.response.use(
    response => {
        // 检查响应内容类型
        const contentType = response.headers['content-type'] || '';
        if (contentType.includes('text/html')) {
            console.error('API返回HTML内容，可能是路由问题');
            return Promise.reject(new Error('服务器返回了无效的HTML响应'));
        }

        // 处理标准响应结构
        if (response.data && typeof response.data === 'object') {
            if (response.data.code && response.data.code !== '200') {
                return Promise.reject(response.data);
            }
            return response;
        }

        return response;
    },
    error => {
        // 统一错误处理
        let errorMessage = '请求失败';

        if (error.response) {
            // 处理HTML响应
            if (error.response.headers['content-type']?.includes('text/html')) {
                errorMessage = '服务器返回了无效的HTML响应';
            } else {
                errorMessage = error.response.data?.message ||
                    error.message ||
                    `HTTP错误 ${error.response.status}`;
            }
        } else if (error.request) {
            errorMessage = '网络请求未完成';
        } else {
            errorMessage = error.message || '请求配置错误';
        }

        if (error.response?.status === 401) {
            console.error('登录过期，请重新登录');
            const authStore = useAuthStore();
            authStore.logout();
        }

        return Promise.reject(errorMessage);
    }
);

export default http;